package com.zxiw.zxedu.recyclerview.adapter


/**
 * @author zhangxiaoming
 * @date 2023/8/18
 * @description
 */
interface DataHelper<T> {
    fun isEnabled(position: Int): Boolean

    /**
     * 添加单个数据到列表头部
     *
     * @param data
     */
    fun addItemToHead(data: T)

    /**
     * 添加单个数据到列表尾部
     *
     * @param data 数据
     */
    fun addItemToLast(data: T): Boolean

    /**
     * 添加数据集到列表头部
     *
     * @param datas
     */
    fun addItemsToHead(datas: List<T>): Boolean

    /**
     * 添加数据集到列表尾部
     *
     * @param datas
     */
    fun addItemsToLast(datas: List<T>): Boolean

    /**
     * 添加数据集合到指定位置
     *
     * @param startPosition 数据添加的位置
     * @param datas         数据集合
     */
    fun addAll(startPosition: Int, datas: List<T>): Boolean

    /**
     * 添加单个数据到指定位置
     *
     * @param position 数据添加的位置
     * @param data          数据
     */
    fun add(position: Int, data: T)

    /**
     * 获取index对于的数据
     *
     * @param index 数据座标
     * @return 数据对象
     */
    fun getData(index: Int): T?

    /**
     * 将某一个数据修改
     *
     * @param oldData 旧的数据
     * @param newData 新的数据
     */
    fun alterObj(oldData: T, newData: T)

    /**
     * 修改对应的位置的数据
     *
     * @param index 修改的位置
     * @param data  要代替的的数据
     */
    fun alterObj(index: Int, data: T)

    /**
     * 删除对应的数据
     *
     * @param data
     */
    fun remove(data: T): Boolean

    /**
     * 删除对应位置的数据
     *
     * @param index
     */
    fun removeToIndex(index: Int)

    /**
     * 替换所有数据
     *
     * @param datas
     */
    fun replaceAll(datas: List<T>)

    /**
     * 清除所有
     */
    fun clear()

    /**
     * 判断数据集合中是否包含这个对象
     *
     * @param data 判断对象
     * @return true|false
     */
    operator fun contains(data: T): Boolean


    /**
     * 覆盖所有数据
     *
     * @param datas
     */
    fun setListAll(datas: List<T>): Boolean
}